import numpy as np

import pynumpak


def test():
    def f(x):
        return x ** 4 + x ** 3 + 7 * x ** 2 + 10 * x - 20

    print(pynumpak.optimize.steffensen(f, 1, show_iter_time=True))  # 用 Steffensen 加速法寻找零点
    print(pynumpak.optimize.newton(f, 1, show_iter_time=True))  # 用 Newton 法寻找零点
    print(pynumpak.optimize.secant(f, 1, show_iter_time=True))  # 用 Secant 法寻找零点
    print(pynumpak.optimize.bisect(f, (1, 2), show_iter_time=True))  # 用二分法寻找零点
    print(pynumpak.optimize.fzero(f, (1, 2), show_iter_time=True))  # 用 zeroin 算法寻找零点

    def f(x):
        return x - np.tan(x)

    print(pynumpak.optimize.steffensen(f, 4.5, show_iter_time=True))  # 用 Steffensen 加速法寻找零点
    print(pynumpak.optimize.newton(f, 4.5, show_iter_time=True))  # 用 Newton 法寻找零点
    print(pynumpak.optimize.secant(f, 4.5, show_iter_time=True))  # 用 Secant 法寻找零点
    print(pynumpak.optimize.bisect(f, (4, 4.6), show_iter_time=True))  # 用二分法寻找零点
    print(pynumpak.optimize.fzero(f, (4, 4.6), show_iter_time=True))  # 用 zeroin 算法寻找零点


if __name__ == "__main__":
    test()
